package leetcode.string;

/**
 * @author Cheng Jun
 * Description: 给定一个数字，我们按照如下规则把它翻译为字符串：0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。
 * 一个数字可能有多个翻译。请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @version 1.0
 * @date 2022/8/3 14:39
 *
 */
public class translateNum {

    // todo 待学习
    public static void main(String[] args) {
    }

    /**
     * 思路：回溯思想
     * 链接：https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/solution/by-feyl-6itn/
     * @param num
     * @return int
     * @author Cheng Jun
     * @date 2022/8/3 14:39
     */
    int res = 0;

    int translateNum(int num) {
        // 1 2
        // 1,2  12
        // 数字转字符串，char数组
        backTrack(0, num + "");
        return res;
    }

    void backTrack(int i, String s) {
        if (i >= s.length()) {
            res++;
            return;
        }
        int o = s.charAt(i);
        backTrack(i + 1, s);
        if (o != '0' && i + 1 < s.length()) {
            int t = Integer.parseInt(s.substring(i, i + 2));
            if (t < 26) backTrack(i + 2, s);
        }
    }

}
